package com.es.designmode.mediator;

/**
 * 中介者模式
 * 用一个中介对象来封装一系列的对象交互
 * 中介者使对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变他们之间的交互
 * <p>
 * 中间做了两次关联，中介与同事需要互相拥有信息
 * <p>
 * 因为 ConcreteMediator控制了集中化，于是就把交互的复杂性变为了中介者的复杂性
 * 就是中介者会变得比任何一个 ConcreteColleague都复杂
 * <p>
 * 中介者模式的有点来源于集中控制，缺点也是
 * 中介者模式一般应用于一组对象以及定义良好但是复杂的方式进行通信的场合，以及想定制一个分布在多个类中的行为，而又不想生成太多子类
 *
 * @author Will
 */
public class ClientSide {

    public static void main(String[] args) {

        ConcreteMediator m = new ConcreteMediator();

        // 让两个同事认识中介
        ConcreteColleague1 c1 = new ConcreteColleague1(m);
        ConcreteColleague2 c2 = new ConcreteColleague2(m);

        // 让中介者认识各个及具体同事类对象
        m.setColleague1(c1);
        m.setColleague2(c2);

        // 具体同事类对象的发送信息都是通过中介者转发的
        c1.send("测试信息1");
        c2.send("测试信息2");
    }
}
